<?php

/**
 * reportes actions.
 *
 * @package    auip
 * @subpackage universidad
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class reportesActions extends sfActions
{
  public function executeReporteUniversidad(sfWebRequest $request)
  {
      $query = "select entidad.id, entidad.nombre, pais.nombre, entidad.region_id, entidad.ciudad_id from entidad, pais WHERE entidad.pais_id=pais.id order by entidad.id"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
         $st = $con->execute($query);//ejecutamos la consulta
         $this->universidads = $st->fetchAll();//recuperamos las tuplas de resultados
      
    $this->setLayout(false);
    $this->getResponse()->setContentType('application/msexcel');
    $this->setTemplate('reporteUniversidad');
    
  }
  
  public function executeExcel1(sfWebRequest $request)
  {
        $query = "select id, nombre, pais_id, region_id, ciudad_id from entidad"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->universidads = $st->fetchAll();//recuperamos las tuplas de resultados
          
    $this->setLayout(false);
    $this->getResponse()->setContentType('application/msexcel');
    $this->setTemplate('reporteUniversidad');
  }
  
  public function executeReporteUniversidadPdf(sfWebRequest $request)
  {
      $query = "select entidad.id, entidad.nombre, pais.nombre, entidad.region_id, entidad.en_mora from entidad, pais WHERE entidad.pais_id=pais.id order by entidad.id"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
         $st = $con->execute($query);//ejecutamos la consulta
         $items = $st->fetchAll();//recuperamos las tuplas de resultados
         
      $listaItems = array('Id', 'Nombre', 'Pais', 'Region', 'Mora');
       $listaAncho = array(10, 80, 40, 38, 12);      
       $alto = 12;
       $mascara = array(0=>'pais', 1=>'cant');
       $this->reportes($listaItems, $listaAncho, $alto, $items, $mascara);
  }
  
  public function executeReporteUniversidadPdf2(sfWebRequest $request)
  { 
        $query = "select pais.nombre, count(pais.nombre) from entidad, pais WHERE entidad.pais_id=pais.id GROUP BY pais.nombre order by pais.nombre"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
         $st = $con->execute($query);//ejecutamos la consulta
         $items = $st->fetchAll();//recuperamos las tuplas de resultados
       
       $this->reportesPie($items);
  }
  
  public function executeReporteUniversidadPdf3(sfWebRequest $request)
  { 
      
     $query = "select pais.nombre, count(pais.nombre) from entidad, pais WHERE entidad.pais_id=pais.id GROUP BY pais.nombre order by pais.nombre"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
         $st = $con->execute($query);//ejecutamos la consulta
         $items = $st->fetchAll();//recuperamos las tuplas de resultados
       
       $this->reportesPieTwo($items);
  }
  
  protected function reportes($listaItems, $listaAncho, $alto, $items, $mascara)
  {

       $config = sfTCPDFPluginConfigHandler::loadConfig();
        sfTCPDFPluginConfigHandler::includeLangFile($this->getUser()->getCulture());

        $doc_title    = "test title";
        $doc_subject  = "test description";
        $doc_keywords = "test keywords";
        
        $htmlcontent = "";
        
        //create new PDF document (document units are set by default to millimeters)
        $pdf = new sfTCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);

        // set document information
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor(PDF_AUTHOR);
        $pdf->SetTitle($doc_title);
        $pdf->SetSubject($doc_subject);
        $pdf->SetKeywords($doc_keywords);

        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);

        //set margins
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

        //set auto page breaks
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); //set image scale factor

        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

        //initialize document
        //$pdf->AliasNbPages();
        $pdf->AddPage();

        // set barcode
        $pdf->SetBarcode(date("Y-m-d H:i:s", time()));

        // output some HTML code
        $pdf->writeHTML($htmlcontent , true, 0);

        // output two html columns
        $first_column_width = 80;
        $current_y_position = $pdf->getY();
        
        for($i=0; $i<count($listaItems)-1; $i=$i+1)
        {
            $pdf->MultiCell($listaAncho[$i], $alto, $listaItems[$i], 1, 'J', 0, 0, '','', true, 0, true, true, 0, 'T', false);
        }
            $pdf->MultiCell($listaAncho[count($listaAncho)-1], $alto, $listaItems[count($listaAncho)-1], 1, 'J', 0);
            
        for($i=0; $i<count($items); $i=$i+1)
        {
            if($i%18 == 0)
            {
                if($i > 0)
                {
                    $pdf->AddPage();
                    for($k=0; $k<count($listaItems)-1; $k=$k+1)
                    {
                        $pdf->MultiCell($listaAncho[$k], $alto, $listaItems[$k], 1, 'J', 0, 0, '','', true, 0, true, true, 0, 'T', false);
                    }
                        $pdf->MultiCell($listaAncho[count($listaAncho)-1], $alto, $listaItems[count($listaAncho)-1], 1, 'J', 0);
                        
                }
            }
            
            for($j=0; $j<count($listaItems)-1; $j=$j+1)
            {
                $pdf->MultiCell($listaAncho[$j], $alto, "<P ALIGN='LEFT'>".$items[$i][$j]."</p>", 1, 'J', 0, 0, '','', true, 0, true, true, 0, 'T', false);
            }
                $pdf->MultiCell($listaAncho[count($listaAncho)-1], $alto, $items[$i][count($listaAncho)-1], 1, 'J', 0);

        }
        
        // output some UTF-8 test content
        // add page header/footer
        $pdf->setPrintHeader(true);
        $pdf->setPrintFooter(true);
        // Close and output PDF document
        $pdf->Output();
        // Stop symfony process
        throw new sfStopException();
  }
  
  
  protected function reportesPie($items)
  {

       $config = sfTCPDFPluginConfigHandler::loadConfig();
        sfTCPDFPluginConfigHandler::includeLangFile($this->getUser()->getCulture());

        $doc_title    = "test title";
        $doc_subject  = "test description";
        $doc_keywords = "test keywords";
        
        $htmlcontent = "";
        
        //create new PDF document (document units are set by default to millimeters)
        $pdf = new sfTCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);//(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);

        // set document information
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor(PDF_AUTHOR);
        $pdf->SetTitle($doc_title);
        $pdf->SetSubject($doc_subject);
        $pdf->SetKeywords($doc_keywords);

        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);

        //set margins
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

        //set auto page breaks
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); //set image scale factor

        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

        //initialize document
        //$pdf->AliasNbPages();
        $pdf->AddPage();

        //CODIGO PARA HACER EL PIE
        
        $pdf->Write(0, 'LE PASTEL');
        
        $dato =count($items);
        $sum = 0;
        
        for($i=0; $i<$dato; $i=$i+1)
        {
            $sum = $sum + $items[$i][1];
        }

        $xc = 105;
        $yc = 100;
        $r = 60;

        $temp = 0;
        
        $rand1[0] = 0;
        $rand2[0] = 0;
        $rand3[0] = 0;
        
       
        
        for($i=0; $i<$dato; $i=$i+1)
        {
            $rand1[$i] = rand(0,255);
            $rand2[$i] = rand(0,255);
            $rand3[$i] = rand(0,255);
            
            $pdf->SetFillColor($rand1[$i], $rand2[$i], $rand3[$i]);
            $pdf->SetTextColor($rand1[$i], $rand2[$i], $rand3[$i]);
            $pdf->PieSector($xc, $yc, $r, $temp, $temp + (360/$sum)*$items[$i][1], 'FD', false, 0, 2);
            
            $pdf->Text(30, 165+(5*$i), $items[$i][0]." => ".$items[$i][1]." => ".round(($items[$i][1]*100/$sum),2)." %");
            
            //extraña funcion para poner los porcentajes alrededor del circulo
            $pdf->SetFontSize(10);
            $pdf->Text($xc -3 + cos(3.14159265359*($temp + (360/($sum*1.7))*$items[$i][1])/180)*(($r+10)), $yc - sin((3.14159265359*($temp + (360/($sum*1.7))*$items[$i][1]))/180)*(($r+5 + ($i%2)*3)), round(($items[$i][1]*100/$sum),1)."%");
            $pdf->SetFontSize(12);
            $temp = $temp + (360/$sum)*$items[$i][1];
            
        }
            $pdf->SetTextColor(0,0,0);
            $pdf->Text(30, 165+(5*$dato), "Total => ".$sum." => 100 %");

        $pdf->AddPage();
        $pdf->Write(0, 'LE BARRAS');
        
        $estiloCuadrado = array('L' => 10, 'T' => 10, 'R' => 10, 'B' => 10);
        //$pdf->Rect(100, 10, 40, 20, 'DF', $estiloCuadrado, array(220, 220, 200));
        
        //busqueda del maximo
        $max = 0;
        for($i=0; $i<$dato; $i=$i+1)
        {
            if($max<$items[$i][1])
            {
                $max=$items[$i][1];
            }
        }

        //Barras y algunos textos
        for($i=0; $i<$dato; $i=$i+1)
        {
            $pdf->Rect(30+(($i)*(150/$dato)), 40+(120-(($items[$i][1]/$max)*120)) , ((150/$dato))-1, (($items[$i][1]/$max)*120), 'DF', $estiloCuadrado, array($rand1[$i], $rand2[$i], $rand3[$i]));
            $pdf->SetTextColor($rand1[$i], $rand2[$i], $rand3[$i]);
            $pdf->Text(30, 160+(5*$i), $items[$i][0]." => ".$items[$i][1]." => ".round(($items[$i][1]*100/$sum),2)." %");
            $pdf->SetFontSize(10);
            $pdf->Text(28+(($i)*(150/$dato)), 35+(120-(($items[$i][1]/$max)*120)) , round(($items[$i][1]*100/$sum),1)."%");
            $pdf->SetFontSize(12);
        }

        //LINEA
            $pdf->Rect(29, 40, 0, 120, 'DF', $estiloCuadrado, array(0,0,0));
        
        //Texto al lado de la linea
        for($i=0; $i<$dato; $i=$i+1)
        {
            $pdf->SetTextColor(0,0,0);
            $pdf->Text(20, 155-($i/$dato)*118, round(($i/$dato)*$sum)+" X");
        }
            $pdf->Text(20, 37, $sum+" X");

            //TOTAL
            $pdf->SetTextColor(0,0,0);
            $pdf->Text(30, 160+(5*$dato), "Total => ".$sum." => 100 %");    
            
        // add page header/footer
        $pdf->setPrintHeader(true);
        $pdf->setPrintFooter(true);
        // Close and output PDF document
        $pdf->Output();
        // Stop symfony process
        throw new sfStopException();
  }
  
  protected function reportesPieTwo($items)
  {

       $config = sfTCPDFPluginConfigHandler::loadConfig();
        sfTCPDFPluginConfigHandler::includeLangFile($this->getUser()->getCulture());

        $doc_title    = "Reportes AUIP";
        $doc_subject  = "Reportes";
        $doc_keywords = "Reports, reportes, reporter extremo";
        
        $htmlcontent = "";
        
        //create new PDF document (document units are set by default to millimeters)
        $pdf = new sfTCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true);//(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);

        // set document information
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor(PDF_AUTHOR);
        $pdf->SetTitle($doc_title);
        $pdf->SetSubject($doc_subject);
        $pdf->SetKeywords($doc_keywords);

        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);

        //set margins
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

        //set auto page breaks
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); //set image scale factor

        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

        //initialize document
        //$pdf->AliasNbPages();
        $pdf->AddPage();

        //CODIGO PARA HACER EL PIE
        
        $pdf->Write(0, 'LE PASTEL');
        
        $dato =count($items);
        $sum = 0;
        
        for($i=0; $i<$dato; $i=$i+1)
        {
            $sum = $sum + $items[$i][1];
        }
        
        $xc = 90;
        $yc = 100;
        $r = 60;

        $temp = 0;
        
        $rand1[0] = 0;
        $rand2[0] = 0;
        $rand3[0] = 0;
        
       
        
        for($i=0; $i<$dato; $i=$i+1)
        {
            $rand1[$i] = rand(0,255);
            $rand2[$i] = rand(0,255);
            $rand3[$i] = rand(0,255);
            
            $pdf->SetFillColor($rand1[$i], $rand2[$i], $rand3[$i]);
            $pdf->SetTextColor($rand1[$i], $rand2[$i], $rand3[$i]);
            $pdf->PieSector($xc, $yc, $r, $temp, $temp + (360/$sum)*$items[$i][1], 'FD', false, 0, 2);
            
            $pdf->Text(170, 30+(5*$i), $items[$i][0]." => ".$items[$i][1]." => ".round(($items[$i][1]*100/$sum),2)." %");
            
            //extraña funcion para poner los porcentajes alrededor del circulo
            $pdf->SetFontSize(10);
            $pdf->Text($xc -3 + cos(3.14159265359*($temp + (360/($sum*1.7))*$items[$i][1])/180)*(($r+10)), $yc - sin((3.14159265359*($temp + (360/($sum*1.7))*$items[$i][1]))/180)*(($r+5 + ($i%2)*3)), round(($items[$i][1]*100/$sum),1)."%");
            $pdf->SetFontSize(12);
            $temp = $temp + (360/$sum)*$items[$i][1];
            
        }
            $pdf->SetTextColor(0,0,0);
            $pdf->Text(170, 30+(5*$dato), "Total => ".$sum." => 100 %");

        $pdf->AddPage();
        $pdf->Write(0, 'LE BARRAS');
        
        $estiloCuadrado = array('L' => 10, 'T' => 10, 'R' => 10, 'B' => 10);
        //$pdf->Rect(100, 10, 40, 20, 'DF', $estiloCuadrado, array(220, 220, 200));
        
        //busqueda del maximo
        $max = 0;
        for($i=0; $i<$dato; $i=$i+1)
        {
            if($max<$items[$i][1])
            {
                $max=$items[$i][1];
            }
        }
        //Barras y algunos textos
        for($i=0; $i<$dato; $i=$i+1)
        {
            $pdf->Rect(30+(($i)*(150/$dato)), 40+(120-(($items[$i][1]/$max)*120)) , ((150/$dato))-1, (($items[$i][1]/$max)*120), 'DF', $estiloCuadrado, array($rand1[$i], $rand2[$i], $rand3[$i]));
            $pdf->SetTextColor($rand1[$i], $rand2[$i], $rand3[$i]);
            $pdf->Text(190, 30+(5*$i), $items[$i][0]." => ".$items[$i][1]." => ".round(($items[$i][1]*100/$sum),2)." %");
            $pdf->SetFontSize(10);
            $pdf->Text(28+(($i)*(150/$dato)), 35+(120-(($items[$i][1]/$max)*120)) , round(($items[$i][1]*100/$sum),1)."%");
            $pdf->SetFontSize(12);
        }
        //LINEA
            $pdf->Rect(29, 40, 0, 120, 'DF', $estiloCuadrado, array(0,0,0));
        
        //Texto al lado de la linea
        for($i=0; $i<$dato; $i=$i+1)
        {
            $pdf->SetTextColor(0,0,0);
            $pdf->Text(20, 155-($i/$dato)*118, round(($i/$dato)*$sum)+" X");
        }
            $pdf->Text(20, 37, $sum+" X");

            //TOTAL
            $pdf->SetTextColor(0,0,0);
            $pdf->Text(190, 30+(5*$dato), "Total => ".$sum." => 100 %");    
            
        // add page header/footer
        $pdf->setPrintHeader(true);
        $pdf->setPrintFooter(true);
        // Close and output PDF document
        $pdf->Output();
        // Stop symfony process
        throw new sfStopException();
  }
  
  public function executeReportesPDFAplicaciones()
  {
        $query = $this->getUser()->getAttribute('query');
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas =  $this->getUser()->getAttribute('lista');

        $listaAncho = array(1,3,2,2,2,2,2,2,2,2,2,2,2);
        $titulo = "Titulo de prueba";
        $this->reportesHTMLAPDF($this->aplicaciones, $this->listas, $listaAncho, $titulo, 2);
  }
  
  public function executeReportesPDFUniversidades()
  {
        $query = $this->getUser()->getAttribute('query');
        //$query = "select entidad.id, entidad.nombre, pais.nombre, entidad.region_id, entidad.ciudad_id from entidad, pais WHERE entidad.pais_id=pais.id order by entidad.id LIMIT 30"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas =  $this->getUser()->getAttribute('lista');
        //$this->listas =array('ID', 'NOMBRE', 'DESCRIPCION', '4', '5');

        //$listaItems = $this->listas;
        //$items = $this->aplicaciones;
        $listaAncho = array(1,7,7,2,2);
        $titulo = "Titulo de prueba";
        $this->reportesHTMLAPDF($this->aplicaciones, $this->listas, $listaAncho, $titulo, 1);
  }
  
    public function executeReportesPDFAspirantes()
  {
        $query = $this->getUser()->getAttribute('query');
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas =  $this->getUser()->getAttribute('lista');

        $listaAncho = array(1,7,7,2,2);
        $titulo = "Titulo de prueba";
        $this->reportesHTMLAPDF2($this->aplicaciones, $this->listas, $listaAncho, $titulo);
  }
  
  /**
   * Funcion encargada de generar una tabla de html dentro del PDF
   * @param type $items
   * @param type $listaItems
   * @param type $listaAncho
   * @param type $titulo
   * @throws sfStopException
   */
  protected function reportesHTMLAPDF($items, $listaItems, $listaAncho, $titulo, $tipoReporte)
  {
      
       $config = sfTCPDFPluginConfigHandler::loadConfig();
        sfTCPDFPluginConfigHandler::includeLangFile($this->getUser()->getCulture());

        $doc_title    = "Reportes AUIP";
        $doc_subject  = "Reportes";
        $doc_keywords = "Reports, reportes, reporter extremo";
                
        //create new PDF document (document units are set by default to millimeters)
        $pdf = new sfTCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true);//(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);

        // set document information
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor(PDF_AUTHOR);
        $pdf->SetTitle($doc_title);
        $pdf->SetSubject($doc_subject);
        $pdf->SetKeywords($doc_keywords);

        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);

        //set margins
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

        //set auto page breaks
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); //set image scale factor

        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

        //initialize document
        //$pdf->AliasNbPages();
        $pdf->AddPage();
   
    if($tipoReporte === 1)
    {
         $html='<table border="1">';
        if (count($listaItems) === 0){
           $html=$html.'<td><h1>NO HAY NINGUN REGISTRO ASOCIADO</h1></td>';
        }else{
        $html=$html.'<tr>';
        for($i=0; $i<count($listaItems); $i++){
          $html=$html.'<th colspan="'.$listaAncho[$i].'"><p align="center"><b>'.$listaItems[$i].'</b></p></th>';
        } 
        $html=$html.'</tr>';
        for($j=0; $j<count($items); $j++){
        $html=$html.'<tr>';
            for($k=0; $k<count($listaItems); $k++){ 
                $html=$html.'<td colspan="'.$listaAncho[$k].'"><p align="center">'.$items[$j][$k].'</p></td>';
            }
        $html=$html.'</tr>';
        }
        }
        $html=$html.'</table>';
   
       
    }
    else//if($tipoReporte === 2)
    {
             $html='<table border="1">';
        if (count($listaItems) === 0){
           $html=$html.'<td><h1>NO HAY NINGUN REGISTRO ASOCIADO</h1></td>';
        }else{
        $html=$html.'<tr>';
        for($i=0; $i<count($listaItems); $i++){
          $html=$html.'<th colspan="'.$listaAncho[$i].'"><p align="center"><b><font size="9">'.$listaItems[$i].'</font></b></p></th>';
        } 
        $html=$html.'</tr>';
        for($j=0; $j<count($items); $j++){
        $html=$html.'<tr>';
            for($k=0; $k<count($listaItems); $k++){ 
                $html=$html.'<td colspan="'.$listaAncho[$k].'"><p align="center"><font size="9">'.$items[$j][$k].'</font></p></td>';
            }
        $html=$html.'</tr>';
        }
        }
        $html=$html.'</table>';
    }
    
        $pdf->writeHTML($html);
        
        // add page header/footer
        $pdf->setPrintHeader(true);
        $pdf->setPrintFooter(true);
        // Close and output PDF document
        $pdf->Output();
        // Stop symfony process
        throw new sfStopException();
  }
  
  protected function reportesHTMLAPDF2($items, $listaItems, $listaAncho, $titulo)
  {
      $totalAncho=0;
      for($l=0; $l<count($listaAncho); $l++)
      {
          $totalAncho = $totalAncho + $listaAncho[$l];
      }
      
       $config = sfTCPDFPluginConfigHandler::loadConfig();
        sfTCPDFPluginConfigHandler::includeLangFile($this->getUser()->getCulture());

        $doc_title    = "Reportes AUIP";
        $doc_subject  = "Reportes";
        $doc_keywords = "Reports, reportes, reporter extremo";
                
        //create new PDF document (document units are set by default to millimeters)
        $pdf = new sfTCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true);//(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);

        // set document information
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor(PDF_AUTHOR);
        $pdf->SetTitle($doc_title);
        $pdf->SetSubject($doc_subject);
        $pdf->SetKeywords($doc_keywords);

        $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);

        //set margins
        $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

        //set auto page breaks
        $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
        $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
        $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); //set image scale factor

        $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
        $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

        //initialize document
        //$pdf->AliasNbPages();
        $pdf->AddPage();
        
        $html='<table border="1">';
    if (count($listaItems) === 0){
       $html=$html.'<td><h1>NO HAY NINGUN REGISTRO ASOCIADO</h1></td>';
    }else{
    $html=$html.'<tr>';
    for($i=0; $i<count($listaItems); $i++){
      $html=$html.'<th colspan="'.$listaAncho[$i].'"><p align="center"><b>'.$listaItems[$i].'</b></p></th>';
    } 
    $html=$html.'</tr>';
    $pais='';$uni='';
    for($j=0; $j<count($items); $j++){
        if($pais != $items[$j][5]){
            $pais = $items[$j][5];
           $html=$html.'<tr><td colspan="'.$totalAncho.'"><b>'.$pais.'</b></td></tr>'; 
        }
        if($uni != $items[$j][6]){
            $uni = $items[$j][6];
           $html=$html.'<tr><td colspan="'.$totalAncho.'"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$uni.'</b></td></tr>';
        }
    $html=$html.'<tr>';
        for($k=0; $k<count($listaItems); $k++){ 
            $html=$html.'<td colspan="'.$listaAncho[$k].'"><p align="center">'.$items[$j][$k].'</p></td>';
        }
    $html=$html.'</tr>';
    }
    }
    $html=$html.'</table>';
       

        $pdf->writeHTML($html);
        
        // add page header/footer
        $pdf->setPrintHeader(true);
        $pdf->setPrintFooter(true);
        // Close and output PDF document
        $pdf->Output();
        // Stop symfony process
        throw new sfStopException();
  }
  
  
  public function executeIndex(sfWebRequest $request)
  {
      $query = "select entidad.id, entidad.nombre, pais.nombre, entidad.region_id, entidad.ciudad_id from entidad, pais WHERE entidad.pais_id=pais.id order by entidad.id LIMIT 30"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
         $st = $con->execute($query);//ejecutamos la consulta
         $this->universidads = $st->fetchAll();//recuperamos las tuplas de resultados
  }
  
  public function executeReporteUsuario(sfWebRequest $request)
  {
      $query = "select entidad.id, entidad.nombre, pais.nombre, entidad.region_id, entidad.ciudad_id from entidad, pais WHERE entidad.pais_id=pais.id order by entidad.id LIMIT 30"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
         $st = $con->execute($query);//ejecutamos la consulta
         $this->universidads = $st->fetchAll();//recuperamos las tuplas de resultados
  }
    
  public function executeReporteAplicaciones(sfWebRequest $request){
      $this->getUser()->setAttribute('query','');
      $this->getUser()->setAttribute('lista','');
  }
  public function executeReporteAplicacionesUniversidad(sfWebRequest $request){
      $this->getUser()->setAttribute('query','');
      $this->getUser()->setAttribute('lista','');
  }
  
  public function executeReporteAplicacionesUniversidadUsuario(sfWebRequest $request){
      $this->getUser()->setAttribute('query','');
      $this->getUser()->setAttribute('lista','');
  }
  
  public function executeReportePorUniversidad(sfWebRequest $request){
      
      $q = "select id, nombre FROM entidad"; //definimos la consulta
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
         $st = $con->execute($q);//ejecutamos la consulta
         $this->valores = $st->fetchAll();//recuperamos las tuplas de resultados
         $this->getUser()->setAttribute('query','');
      $this->getUser()->setAttribute('lista','');
  }
  
/**
  * Proceso que realiza la consulta de las Becas en el modulo Reportes
  *
  **/
  public function executeProcesadorBecas(sfWebRequest $request)
  {    
     $ids = BecaTable::getIdEntidad($request->getParameter('parametro1'));
     
    if ($request->isXmlHttpRequest()) 
    {   
        $query2 = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='beca' AND "; //definimos la consulta
        //$query2[0]="ID";
        //$query2[1]="LOGO";
        //$query2[2]="DESCRIPCION";
        
        $query = "SELECT * FROM beca WHERE '1' = '1' "; //definimos la consulta
        //$q = Doctrine_Query::create()->from('Beca b')->where('1 = 1');
        
        if ($request->getParameter('parametro0') != '')
        {   
          //$q->andWhere('b.nombre ILIKE ?', '%'.$request->getParameter('parametro0').'%');
          $query = $query." AND beca.nombre ILIKE '%".$request->getParameter('parametro0')."%' ";
        }
        if($request->getParameter('parametro1') != '')
        {       
          //$q->andwhere('b.entidad_que_convoca='.$ids[0] );
          $query = $query." AND beca.entidad_que_convoca='".$ids[0]+"' ";
          for($i=1; $i<count($ids); $i++)
            {
              //$q->orWhere('b.entidad_que_convoca='.$ids[$i] );
              $query = $query." OR beca.entidad_que_convoca='".$ids[$i]."' ";
            }          
        }
        if($request->getParameter('parametro3') == 2)
        {
            //$q->andWhere( '(b.fecha_fin - b.fecha_inicio) < 15')->addOrderBy('b.fecha_inicio DESC');
            $query = $query." AND beca.fecha_fin - b.fecha_inicio < 15 ";
        }  
        if($request->getParameter('parametro2') == 1)
        {      
            //$q->addOrderBy('b.fecha_inicio DESC')->limit(5);
            $query = $query." ORDER BY beca.fecha_inicio DESC ";
        }
        //$this->becas=$q->execute();        
    }
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->becas = $st->fetchAll();//recuperamos las tuplas de resultados
        //$st = $con->execute($query2);//ejecutamos la consulta
        //$this->lista = $st->fetchAll();
        $this->lista =array('ID', 'NOMBRE', 'DESCRIPCION');

}

  
 /**
  * Proceso que realiza la consulta de las Becas en el modulo Reportes
  *
  **/
  public function executeProcesadorAplicaciones(sfWebRequest $request)
  {    

    if ($request->isXmlHttpRequest()) 
    {   
        $query = "SELECT ap.beca_id, b.nombre, ap.usuario_id, (u.nombre || ' ' || u.apellidos) as nombres, e.nombre, e2.nombre, u.titulo, ap.actividades, ap.informacion_adicional, ap.fecha, ap.hora,  ap.estado_actual, ap.entrego_informe FROM aplicacion_beca as ap INNER JOIN entidad AS e2 ON (ap.entidad_destino=e2.id) INNER JOIN beca as b ON (ap.beca_id=b.id) INNER JOIN usuario AS u ON (ap.usuario_id=u.email) INNER JOIN entidad AS e ON (u.entidad_origen=e.id) WHERE '1'='1' ";
     
        if ($request->getParameter('parametro0') != '')
        {   
          $query = $query." AND (ap.usuario_id ILIKE '%".$request->getParameter('parametro0')."%' OR (u.nombre || ' ' || u.apellidos) ILIKE '%".$request->getParameter('parametro0')."%') ";
        }
        if ($request->getParameter('parametro1a') != '0' && $request->getParameter('parametro1a') != '')
        {   
          $query = $query." AND (ap.beca_id ='".$request->getParameter('parametro1a')."') ";
        }
        if ($request->getParameter('parametro1') != '')
        {   
          $query = $query." AND (b.nombre ILIKE '%".$request->getParameter('parametro1')."%') ";
        }
        if ($request->getParameter('parametro2') != '')
        {   
          $query = $query." AND ap.estado_actual ILIKE '%".$request->getParameter('parametro2')."%' ";
        }
        if ($request->getParameter('parametro3') != '')
        {   
          $query = $query." AND ap.entrego_informe ILIKE '%".$request->getParameter('parametro3')."%' ";
        }
        $query = $query." ORDER BY ap.usuario_id ";
        
    }
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas = array('ID beca', 'Nombre de la convocatoria', 'Email de usuario', 'Nombre Completo de usuario', 'Entidad origen', 'Entidad destino', 'Titulo Universitario', 'Actividades a realizar', 'Informacion adicional' , 'Fecha', 'Hora' , 'Estado actual de la solicitud', 'Entrego informe?');
        
        $this->getUser()->setAttribute('query', $query);
        $this->getUser()->setAttribute('lista', $this->listas);

}

public function executeProcesadorAplicacionesUniversidad(sfWebRequest $request)
{    

    if ($request->isXmlHttpRequest()) 
    {  
        $query = "SELECT b.id, b.nombre, e.nombre, COUNT(e.nombre), COUNT(e.nombre)*b.costo_estimado FROM aplicacion_beca as ap INNER JOIN beca as b ON (ap.beca_id=b.id) INNER JOIN usuario AS u ON (ap.usuario_id=u.email) INNER JOIN entidad as e ON (u.entidad_origen=e.id) WHERE ap.estado_actual='si'  ";
     
        if ($request->getParameter('parametro1a') != '0' && $request->getParameter('parametro1a') != '')
        {   
          $query = $query." AND (ap.beca_id ='".$request->getParameter('parametro1a')."') ";
        }
        if ($request->getParameter('parametro1') != '')
        {   
          $query = $query." AND (b.nombre ILIKE '%".$request->getParameter('parametro1')."%') ";
        }
       
        $query = $query."  GROUP BY b.id, b.nombre, e.nombre, b.costo_estimado";
        
    }
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas = array('ID','Convocatoria','Universidad de Origen', 'Cantidad', 'Costo');
        
        $this->getUser()->setAttribute('query', $query);
        $this->getUser()->setAttribute('lista', $this->listas);
}

public function executeProcesadorPorUniversidad(sfWebRequest $request)
{    

    if ($request->isXmlHttpRequest()) 
    {  
        $query = "SELECT b.id, b.nombre, e.nombre, COUNT(e.nombre), COUNT(e.nombre)*b.costo_estimado FROM aplicacion_beca as ap INNER JOIN beca as b ON (ap.beca_id=b.id) INNER JOIN usuario as u ON (ap.usuario_id=u.email) INNER JOIN entidad as e ON (u.entidad_origen=e.id) WHERE ap.estado_actual='si'  ";
     
        if ( $request->getParameter('parametro1') != '')
        {   
          $query = $query." AND e.nombre ='".$request->getParameter('parametro1')."' ";
        }
       
        $query = $query."  GROUP BY b.id, b.nombre, e.nombre, b.costo_estimado";
    }
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas = array('ID','Convocatoria','Universidad de Origen', 'Cantidad', 'Costo');
        
        $this->getUser()->setAttribute('query', $query);
        $this->getUser()->setAttribute('lista', $this->listas);
}

public function executeProcesadorAplicacionesUniversidadUsuario(sfWebRequest $request)
  {    

    if ($request->isXmlHttpRequest()) 
    {  
        $query = "SELECT b.id, b.nombre, (u.nombre || ' ' || u.apellidos) as nombres, u.email, b.costo_estimado, pa.nombre, e.nombre  FROM aplicacion_beca as ap INNER JOIN beca as b ON (ap.beca_id=b.id) INNER JOIN usuario as u ON (ap.usuario_id=u.email) INNER JOIN entidad as e ON (u.entidad_origen=e.id) INNER JOIN pais as pa ON (e.pais_id=pa.id) WHERE ap.estado_actual='si'  ";
     
        if ($request->getParameter('parametro1a') != '0' && $request->getParameter('parametro1a') != '')
        {   
          $query = $query." AND (ap.beca_id ='".$request->getParameter('parametro1a')."') ";
        }
        if ($request->getParameter('parametro1') != '')
        {   
          $query = $query." AND (b.nombre ILIKE '%".$request->getParameter('parametro1')."%') ";
        }
       
        $query = $query."  GROUP BY b.id, b.nombre, pa.nombre, e.nombre, nombres, u.email, b.costo_estimado";
        
    }
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas = array('ID','Convocatoria','Nombre del Aspirante', 'Email', 'Costo');
        
        $this->getUser()->setAttribute('query', $query);
        $this->getUser()->setAttribute('lista', $this->listas);
}

public function executeExportarAplicacionesUsuarios(sfWebRequest $request)
  {
      
       $query = $this->getUser()->getAttribute('query');
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas =  $this->getUser()->getAttribute('lista');
                
        $this->setLayout(false);
        $this->getResponse()->setContentType('application/msexcel');
        $this->setTemplate('exportarAplicacionesUsuarios');
  }

  public function executeExportarAplicaciones(sfWebRequest $request)
  {
      
       $query = $this->getUser()->getAttribute('query');
        $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
        $st = $con->execute($query);//ejecutamos la consulta
        $this->aplicaciones = $st->fetchAll();//recuperamos las tuplas de resultados
        $this->listas =  $this->getUser()->getAttribute('lista');
                
        $this->setLayout(false);
        $this->getResponse()->setContentType('application/msexcel');
        $this->setTemplate('exportarAplicaciones');
  }

  
  public function executeIndex2(sfWebRequest $request)
  {
    $query = "select count(pais.nombre), pais.nombre from entidad, pais WHERE entidad.pais_id=pais.id GROUP BY pais.nombre order by pais.nombre"; //definimos la consulta
    $con = Doctrine_Manager::getInstance()->connection();//recuperamos el singleton de la conexión
    $st = $con->execute($query);//ejecutamos la consulta
    $this->datos = $st->fetchAll();//recuperamos las tuplas de resultados

    //-------------PEDAZO COPIABLE PARA EL CAMBIO DE DATOS DE OTRAS TABLAS----------------

    $this->listaItems = array('Pais', 'Cantidad');
    
    $this->setLayout(false);
    $this->getResponse()->setContentType('application/msexcel');
    $this->setTemplate('index2');

  }

  public function executeShow(sfWebRequest $request)
  {
    $this->universidad = Doctrine_Core::getTable('Entidad')->find(array($request->getParameter('id')));
    $this->forward404Unless($this->universidad);
  }


  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $universidad = $form->save();

      //$this->redirect('universidad/edit?id='.$universidad->getId());
      $this->redirect('becas/entidad');            
    }
  }
}
